%!Tex Program = xelatex
\documentclass[a4paper,12pt]{article}
\usepackage{amssymb,amsmath,amsfonts,amsthm}
%\usepackage{newtxtext,newtxmath}
\usepackage{fontspec,xunicode,xltxtra}
\usepackage[english]{babel}
\usepackage{listings}
\usepackage{mathrsfs}
%\usepackage{zhfontcfg}
%\usepackage{indentfirst}
%\usepackage[colorlinks,linkcolor=black]{hyperref}
%\usepackage{setspace}
%\usepackage{geometry}
% or whatever

%\usepackage[latin1]{inputenc}
% or whatever

\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt

% Ubuntu
\newfontfamily\hei{WenQuanYi Micro Hei Mono}
\newfontfamily\whei{WenQuanYi Zen Hei Mono}
\newfontfamily\kaishu{AR PL KaitiM GB}
\newfontfamily\song{AR PL SungtiL GB}
\newfontfamily\lishu{WenQuanYi Micro Hei Mono}
\setmainfont[Mapping=tex-text]{AR PL SungtiL GB}
\setsansfont[Mapping=tex-text]{AR PL KaitiM GB}
\setmonofont[Mapping=tex-text]{WenQuanYi Micro Hei Mono}

% Mac
%% \newfontfamily\hei{STHeitiSC-Light}
%% \newfontfamily\whei{STHeitiSC-Medium}
%% \newfontfamily\kaishu{STKaitiSC-Regular}
%% \newfontfamily\song{STSongti-SC-Regular}
%% \newfontfamily\lishu{STLibianSC-Regular}
%% \setmainfont[Mapping=tex-text]{STSongti-SC-Regular}
%% \setsansfont[Mapping=tex-text]{STKaitiSC-Regular}
%% \setmonofont[Mapping=tex-text]{STHeitiSC-Medium}
\renewcommand{\baselinestretch}{1.25}

\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{ulem}
\usepackage{pgf}
\usepackage{graphicx}

\usepackage[hmargin={3.18cm, 3.18cm}, width=14.64cm,
             vmargin={2.54cm, 2.54cm}, height=24.62cm]{geometry}
\pagestyle{empty}

\usepackage{fancyhdr}
\usepackage{lastpage}
\pagestyle{fancy} %fancyhdr宏包新增的页面风格
\renewcommand{\headrulewidth}{0pt}
%\fancyhf{}
\cfoot{第 \thepage 页，共 \pageref{LastPage} 页}%当前页 of 总页数

\renewcommand\baselinestretch{1.2}
\setlength{\headwidth}{\textwidth}

%\renewcommand{\labelenumi}{\bf{\chinese{enumi}、}}
\renewcommand{\labelenumii}{\arabic{enumii}.}
\renewcommand{\labelenumiii}{\Roman{enumiii}}

\newcommand{\chuhao}{\fontsize{42pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaochuhao}{\fontsize{36pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\yihao}{\fontsize{28pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\erhao}{\fontsize{21pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaoerhao}{\fontsize{18pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\sanhao}{\fontsize{15.75pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\sihao}{\fontsize{14pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaosihao}{\fontsize{12pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\wuhao}{\fontsize{10.5pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\xiaowuhao}{\fontsize{9pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\liuhao}{\fontsize{7.875pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\qihao}{\fontsize{5.25pt}{\baselineskip}\selectfont} % 字号设置

\newtheorem{theorem}{定理}
\newtheorem{definition}{定义}
\addto{\captionsenglish}{%
  \renewcommand{\refname}{参考文献}%
  \renewcommand{\proofname}{证明}%
  \renewcommand{\figurename}{图}%
%  \renewcommand{\bibname}{参考文献}%
}

\renewcommand{\theequation}{\arabic{section}.\arabic{equation}}
\renewcommand{\thetheorem}{\arabic{section}.\arabic{theorem}}
\renewcommand{\thedefinition}{\arabic{section}.\arabic{definition}}


\begin{document}

\title{\hei 矩阵向量模板类的继承和运算实现}


%\date{}
\maketitle

%%------------------------------------------
%% \section{问题}
%% \setcounter{equation}{0}
%% \setcounter{theorem}{0}
%% \setcounter{definition}{0}

\begin{enumerate}
\item 请以合理的继承逻辑，设计以下模板类：\verb|Matrix<T>| 表示一般 \verb|n_row x n_col| 矩阵，
  这里 \verb|n_row| 和 \verb|n_col| 分别表示矩阵的行数和列数；
\item 请在 \verb|Matrix<T>| 中提供成员函数 \verb|is_square()|，判定是否为方阵，返回 \verb|true|
  表示方阵；
\item 矩阵的元素存储 \verb|matrix_elements| 必须是一个 \verb|T*| 的指针，
  并用 \verb|new| 和 \verb|delete| 动态管理分配。
\item 请以 \verb|Matrix<T>| 为基类，派生出 \verb|RowVector<T>| 类和 \verb|ColVector<T>|
  分别表示行向量和列向量；
\item 请设计二元运算 \verb|*|，实现矩阵间乘法；

\item 要求该二元运算 \verb|*|，能自然地实现：列向量 \verb|*| 行向量，结果为矩阵的运算；

\item 在适当的地方重载二元运算\verb|*|，实现：行向量 \verb|*| 列向量，结果为一个数，类型为模板类型 \verb|T|；

\item 在适当的地方重载二元运算\verb|*|，实现：列向量 \verb|*| 列向量，返回值为二者的内积，类型为模板类型 \verb|T|；
\item 在适当的地方重载二元运算\verb|*|，实现：行向量 \verb|*| 行向量，返回值为二者的内积，类型为模板类型 \verb|T|；  
\item 作业要求：
\begin{enumerate}
\item 在你的gitee目录中增加项目matrix（注意大小写！），包含作业全部内容；
\item 你的matrix项目中，必须包含以下文件：
\begin{enumerate}
\item \verb|Makefile|，编译规则；直接运行 \verb|make| 应该产生可执行文件 \verb|test|，用于测试你的程序；
\item \verb|main.cpp|，主流程；编译后产生 \verb|test|；
\item \verb|Matrix.h|，头文件；包含了全部的矩阵、向量和运算的声明和实现；必须采用模板形式；
\item \verb|report|，解释你的项目设计思路和测试说明；可以使用txt，md或者tex格式，严禁使用word。如果是tex格式，
  可以参考本作业文件，同时，在工作目录中输入 \verb|make report| 应该产生report.pdf；
\item \verb|run|，脚本文件，用于测试。要求运行 \verb|bash run| 能输出的结果能验证上述设计要求；
  请自己设计测试数据和测试流程，并在report中给出必要的说明、结果的分析和结论；
\item 请自己设计因用户输入不正确或其他原因出现的异常处理，允许给出警告后直接中断程序运行，
  这种情况暂时不用考虑内存泄露问题；
\item 如果程序正常完成并退出，不应该发生内存泄露。否则会适当扣分；
\item 全部代码应该有必要的注释，以便于助教理解，鼓励使用 \verb|doxygen|；
\item 全部代码应该尽可能使用引用 \verb|&| 以减少内部复制；
\item 全部代码应该充分考虑必要的 \verb|const| 限制以提高安全性； 
\item {\hei 所有代码和作业必须按要求上传至你的gitee目录，才会被助教接受！当你已经完成提交后，
  请在学在浙大提交“已完成”，方便助教给分。}
\end{enumerate}
\end{enumerate}
\end{enumerate}

\bibliographystyle{plain}
\bibliography{../crazyfish}
\end{document}
